/*
 * 代号：凤凰
 * http://www.jphenix.org
 * 2022年8月21日
 * V4.0
 */
package com.jphenix.servlet.api.javax;

import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Enumeration;
import java.util.EventListener;
import java.util.Set;

import javax.servlet.ServletContext;

import com.jphenix.servlet.exception.ServletException;
import com.jphenix.standard.docs.ClassInfo;
import com.jphenix.standard.servlet.api.IServletContext;
import com.jphenix.standard.servlet.api.ISessionCookieConfig;

/**
 * Servlet上下文类
 * 
 * 2022-09-04 重构了对接Tomcat9以及以前版本代码
 * 2022-09-05 修改了发现的错误
 * 
 * @author MBG
 * 2022年8月21日
 */
@ClassInfo({"2022-09-05 23:40","Servlet上下文类"})
public class ServletContextImpl implements IServletContext {

	private ServletContext kernel = null; // 核心类
	
	/**
	 * 构造函数
	 * @author MBG
	 */
	public ServletContextImpl(ServletContext servletContext) {
		super();
		this.kernel = servletContext;
	}


	/**
	 * 覆盖方法
	 */
	@Override
	public String getTempDir() {
		return javax.servlet.ServletContext.TEMPDIR;
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public String getOrderedLibs() {
		return javax.servlet.ServletContext.ORDERED_LIBS;
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public String getContextPath() {
		return kernel.getContextPath();
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public IServletContext getContext(String uripath) {
		return new ServletContextImpl(kernel.getContext(uripath));
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public int getMajorVersion() {
		return kernel.getMajorVersion();
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public int getMinorVersion() {
		return kernel.getMinorVersion();
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public int getEffectiveMajorVersion() {
		return kernel.getEffectiveMajorVersion();
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public int getEffectiveMinorVersion() {
		return kernel.getEffectiveMinorVersion();
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public String getMimeType(String file) {
		return kernel.getMimeType(file);
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public Set<String> getResourcePaths(String path) {
		return kernel.getResourcePaths(path);
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public URL getResource(String path) throws MalformedURLException {
		return kernel.getResource(path);
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public InputStream getResourceAsStream(String path) {
		return kernel.getResourceAsStream(path);
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public void log(String msg) {
		kernel.log(msg);
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public void log(String message, Throwable throwable) {
		kernel.log(message,throwable);
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public String getRealPath(String path) {
		return kernel.getRealPath(path);
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public String getServerInfo() {
		return kernel.getServerInfo();
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public String getInitParameter(String key) {
		return kernel.getInitParameter(key);
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public Enumeration<String> getInitParameterNames() {
		return kernel.getInitParameterNames();
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public boolean setInitParameter(String key, String value) {
		return kernel.setInitParameter(key,value);
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public Object getAttribute(String key) {
		return kernel.getAttribute(key);
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public Enumeration<String> getAttributeNames() {
		return kernel.getAttributeNames();
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public void setAttribute(String key, Object value) {
		kernel.setAttribute(key,value);
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public void removeAttribute(String key) {
		kernel.removeAttribute(key);
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public String getServletContextName() {
		return kernel.getServletContextName();
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public ISessionCookieConfig getSessionCookieConfig() {
		return new SessionCookieConfigImpl(kernel.getSessionCookieConfig());
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public void addListener(String className) {
		kernel.addListener(className);
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public <T extends EventListener> void addListener(T t) {
		kernel.addListener(t);
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public void addListener(Class<? extends EventListener> listenerClass) {
		kernel.addListener(listenerClass);
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public <T extends EventListener> T createListener(Class<T> listenerClass) throws ServletException {
		try {
			return kernel.createListener(listenerClass);
		}catch(Exception e) {
			throw new ServletException(e);
		}
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public ClassLoader getClassLoader() {
		return kernel.getClassLoader();
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public String getVirtualServerName() {
		return kernel.getVirtualServerName();
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public int getSessionTimeout() {
		return kernel.getSessionTimeout();
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public void setSessionTimeout(int sessionTimeout) {
		kernel.setSessionTimeout(sessionTimeout);
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public String getRequestCharacterEncoding() {
		return kernel.getRequestCharacterEncoding();
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public void setRequestCharacterEncoding(String encoding) {
		kernel.setRequestCharacterEncoding(encoding);
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public String getResponseCharacterEncoding() {
		return kernel.getResponseCharacterEncoding();
	}

	/**
	 * 覆盖方法
	 */
	@Override
	public void setResponseCharacterEncoding(String encoding) {
		kernel.setResponseCharacterEncoding(encoding);
	}
}
